var 词法单元 = [];
for (var 词法序号=0;词法序号<33;词法序号++) 词法单元[词法序号]=null;
词法单元[0]=/#/;            词法单元[1]=/for/;         词法单元[2]=/if/;      词法单元[3]=/then/;
词法单元[4]=/else/;         词法单元[5]=/while/;       词法单元[6]=/do/;      词法单元[10]=/[a-zA-Z][a-zA-z0-9]*/;
词法单元[11]=/[0-9]+/;      词法单元[13]=/\+/;         词法单元[14]=/-/;      词法单元[15]=/\*/;
词法单元[16]=/\//;          词法单元[17]=/:/;          词法单元[18]=/:=/;     词法单元[20]=/</;
词法单元[21]=/<>/;          词法单元[22]=/<=/;         词法单元[23]=/>/;      词法单元[24]=/>=/;
词法单元[25]=/=/;           词法单元[26]=/;/;          词法单元[27]=/\(/;     词法单元[28]=/\)/;
词法单元[29]=/until/;       词法单元[30]=/int/;        词法单元[31]=/input/;  词法单元[32]=/output/;
词法单元[33]=/id/;
词法单元[34]=/Epsilon/;
词法单元[35]=/->/;          词法单元[41]=/[A-Z]\'/;
词法单元[36]=/\(/;          词法单元[42]=/[A-Z]/;
词法单元[37]=/\)/;          词法单元[43]=/[a-z]/;
词法单元[38]=/\*/;          词法单元[44]=/\|/;
词法单元[39]=/\+/;
词法单元[40]=/#/;
var 关键字表=[/for/g,/if/g,/then/g,/else/g,/while/g,/do/g,/until/g,/int/g];
exports.lexOne=function(input){
    for(var i=33;i<=44;i++){
        var ma=input.match(词法单元[i]);
        if(ma&&ma!=null){
            var index=ma.index;
        }
        if(index==0){
            return i;
        }
    }
};
exports.lexFirst=function(input){
    var 输入内容=input;
    var 二元组表 = [];
    for (var 指针 = 0; 指针 < 输入内容.length; 指针++) {
        for (var 词法序号 = 33; 词法序号 <= 44; 词法序号++) {
            if (词法单元[词法序号] && 词法单元[词法序号] != null) {
                var 输入截取 = 输入内容.slice(指针);
                // console.log(输入截取);
                var 匹配内容 = 输入截取.match(词法单元[词法序号]);

                if (匹配内容 && 匹配内容 != null) {
                    var index = 匹配内容.index;
                }
                if (index == 0) {
                    index = null;
                    指针 += 匹配内容[0].length-1 ;
                    二元组表.push(词法序号);
                    二元组表.push(匹配内容[0]);
                    break;
                }
            }
        }
    }
    return 二元组表;
};
exports.lexAll=function(input){
    输入内容=input[0];
    var 二元组表 = [];
    for (var 指针 = 0; 指针 < 输入内容.length; 指针++) {
        for (var 词法序号 = 25; 词法序号 <= 32; 词法序号++) {
            if (词法单元[词法序号] && 词法单元[词法序号] != null) {
                var 输入截取 = 输入内容.slice(指针);
                var 匹配内容 = 输入截取.match(词法单元[词法序号]);

                if (匹配内容 && 匹配内容 != null) {
                    var index = 匹配内容.index;
                }
                if (index == 0) {
                    index = null;
                    指针 += 匹配内容[0].length-1;
                    二元组表.push(词法序号);
                    二元组表.push(匹配内容[0]);
                }
            }
        }
        for (var 词法序号 = 0; 词法序号 <= 16; 词法序号++) {

            if (词法单元[词法序号] && 词法单元[词法序号] != null) {

                var 输入截取 = 输入内容.slice(指针);
                var 匹配内容 = 输入截取.match(词法单元[词法序号]);

                if (匹配内容 && 匹配内容 != null) {
                    //                      console.log(匹配内容[0]+" "+匹配内容.index);
                    var index = 匹配内容.index;
                    //                      alert(index +" " + 指针);
                }

                if (index==0) {
                    index=null;
                    指针 += 匹配内容[0].length-1;
                    二元组表.push(词法序号);
                    二元组表.push(匹配内容[0]);
                }
            }
        }
        //处理17-25号
        //:=   =
        {
            var 输入截取 = 输入内容.slice(指针);
            var 匹配内容 = 输入截取.match(词法单元[18]);
            if (匹配内容 && 匹配内容 != null) {
                var index = 匹配内容.index;
            } else {
                匹配内容 = 输入截取.match(词法单元[17]);
                if (匹配内容 && 匹配内容 != null) {
                    var index = 匹配内容.index;
                }
                if (index == 0) {
                    index = null;
                    指针 += 匹配内容[0].length-1;
                    二元组表.push(17);
                    二元组表.push(匹配内容[0]);
                }
            }
            if (index == 0) {
                index = null;
                指针 += 匹配内容[0].length-1;
                二元组表.push(18);
                二元组表.push(匹配内容[0]);
            }

        }
        //20-24
        {
            var 输入截取 = 输入内容.slice(指针);
            var 匹配内容 = 输入截取.match(词法单元[21]);
            if (匹配内容 && 匹配内容 != null) {
                var index = 匹配内容.index;
            } else {
                匹配内容 = 输入截取.match(词法单元[22]);
                if (匹配内容 && 匹配内容 != null) {
                    var index = 匹配内容.index;
                }else{
                    匹配内容 = 输入截取.match(词法单元[20]);
                    if (匹配内容 && 匹配内容 != null) {
                        var index = 匹配内容.index;
                    }else {
                        if (index == 0) {
                            index = null;
                            指针 += 匹配内容[0].length-1;
                            二元组表.push(20);
                            二元组表.push(匹配内容[0]);
                        }
                    }
                    if (index == 0) {
                        index = null;
                        指针 += 匹配内容[0].length-1;
                        二元组表.push(22);
                        二元组表.push(匹配内容[0]);
                    }
                }
                if (index == 0) {
                    index = null;
                    指针 += 匹配内容[0].length-1;
                    二元组表.push(17);
                    二元组表.push(匹配内容[0]);
                }
            }
            if (index == 0) {
                index = null;
                指针 += 匹配内容[0].length-1;
                二元组表.push(18);
                二元组表.push(匹配内容[0]);
            }
        }
        {
            var 输入截取 = 输入内容.slice(指针);
            var 匹配内容 = 输入截取.match(词法单元[24]);
            if (匹配内容 && 匹配内容 != null) {
                var index = 匹配内容.index;
            } else {
                匹配内容 = 输入截取.match(词法单元[23]);
                if (匹配内容 && 匹配内容 != null) {
                    var index = 匹配内容.index;
                }
                if (index == 0) {
                    index = null;
                    指针 += 匹配内容[0].length-1;
                    二元组表.push(23);
                    二元组表.push(匹配内容[0]);
                }
            }
            if (index == 0) {
                index = null;
                指针 += 匹配内容[0].length-1;
                二元组表.push(24);
                二元组表.push(匹配内容[0]);
            }

        }
        //处理完毕

    }
    return 二元组表;
};